package com.partsoft.dits.ldap;

import java.util.List;
import java.util.Map;

import org.springframework.ldap.core.ContextSource;

import com.partsoft.dits.LdapDataEdgeDescriptor;
import com.partsoft.dits.log.ChangeLogResolver;
import com.partsoft.dits.log.ChangeLogStorage;
import com.partsoft.dits.message.DataAction;
import com.partsoft.dits.message.DataProperty;

/**
 *	数据源监听上下文 
 */
public interface LdapChangeLogMonitorContext {

	/**
	 * 获得监听的数据源
	 */
	ContextSource getLdapContextSource();
	
	/**
	 * 变更日志获取器
	 */
	ChangeLogResolver getChangeLogResolver();
	
	/**
	 * 变更日志保存器
	 * @return
	 */
	ChangeLogStorage getChangeLogStorage();
	
	/**
	 * 获得系统名字空间
	 */
	String getNamespace();
	
	/**
	 * 变更日志监听描述符
	 */
	LdapChangeLogMonitorDescriptor getChangeLogMonitorDescriptor();
	
	/**
	 * 获取定义的表数据描述数组。
	 * @param schemaName 模式名称
	 * @param tableName 表名称
	 * @return
	 */
	LdapDataEdgeDescriptor[] getMonitoredDataDescriptors();

	/**
	 * 处理监听数据
	 * @param descriptor
	 * @param dataAction 
	 * @param changedRows
	 */
	void processMonitorData(LdapDataEdgeDescriptor descriptor, DataAction dataAction, List<Map<DataProperty, String>> changedRows);
	
}
